home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
gnu
/
oleo-1_4.lha
/
oleo-1.4
/
key.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-30
|
3KB
|
113 lines
#ifndef KEYH
#define KEYH
/* Copyright (C) 1993 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this software; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* t. lord Thu Jan 21 16:13:14 1993 */
#include "global.h"
#include "line.h"
/*
* Keymaps and keybinds.
* Within a keymap, keys are bound to a `struct key'.
*
* Normally, `the_funcs[akey.vector][akey.code]' is the command binding of a
* key. However, the akey.vector == -1, then the binding is to another
* keymap, found by the_maps[akey.code]. The final exception, is that if
* both vector and code are -1, then the key is unbound.
*/
struct cmd_func;
struct key
{
short vector;
short code;
};
/* For commands that take a keysequence argument: */
struct key_sequence
{
int top_map;
struct line * keys; /* char_to_string name of the key sequence. */
struct key cmd; /* The mapping of the sequence. */
};
struct keymap
{
struct keymap *map_next;
int id;
struct key keys[256];
};
extern int num_maps;
extern struct keymap **the_maps;
extern char **map_names;
extern char **map_prompts;
#ifndef CTRL
#define CTRL(X) ((X)&037)
#endif
#ifndef META
#define META(X) ((X)|0200)
#endif
/* String convention conversion. */
#define map_id(NAME) map_idn(NAME, strlen(NAME))
/*
* Keymap names. They can be used as indices into the_maps and map_names.
*/
#define MAIN_MAP map_id("main")
#define EDIT_MAP map_id("edit")
#define DIGIT_MAP map_id("digit")
#define NAVIGATE_MAP map_id("navigate")
#ifdef __STDC__
extern int search_map_for_cmd (struct line * line, int map, int vec, int code);
extern void bind_key (char * keymap, char * function, int ch);
extern void bind_set (char * keymap, char * command, char * keyset);
extern void bind_all_keys (char * keymap, char * function);
extern void write_keys_cmd (FILE *fp);
extern void clear_keymap (struct keymap *m);
extern int map_idn (char *name, int n);
extern void create_keymap (char * mapname, char * parentname);
extern void set_map_prompt (char * map, char * str);
#else
extern int search_map_for_cmd ();
extern void bind_key ();
extern void bind_set ();
extern void bind_all_keys ();
extern void write_keys_cmd ();
extern void clear_keymap ();
extern int map_idn ();
extern void create_keymap ();
extern void set_map_prompt ();
#endif
#endif /* KEYH */